﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*      抽象类是提炼出一些类共有的属性或函数接口的组织，、
 *      为子类提供设计思想 配合多态多用于代码架构设计
 *      
 *      
 *抽象类 不能被实例化 
 *         可只提供部分函数实现 也可声明抽象函数
 *   
 *      
 *      1、不能被实例化 
 *      2、支持构造函数
 *      3、抽象类可继承抽象类
 *      4、静态构造函数 只执行一次；但是其他的构造函数 则根据不同实例  分别再再次调用
 */

public abstract class Myclass3
{
    public int a;
    public Myclass3() { Debug.Log("Myclass3默认构造函数"); }
    static Myclass3() { Debug.Log("Myclass3静态构造函数"); }
    public void Show1()
    {
        Debug.Log("Show1");
    }
    public virtual void Show2()
    {
        Debug.Log("Myclass3_virtual Show2");
    }
}
public class Myclass4: Myclass3
{
    public Myclass4() { Debug.Log("Myclass4"); }
    public override void Show2()
    {
        Debug.Log("Myclass4_override Show2");
    }
}
public class Abstract1 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //Myclass4 myclass4 = new Myclass4();
        //Myclass4 myclass5 = new Myclass4();
        // 正确：实例化子类
        //MySubClass obj = new MySubClass();
        //obj.MyAbstractMethod();  // 调用子类实现的方法
        //obj.MyConcreteMethod();  // 调用抽象类中的具体方法
        Zombie zombie = new Zombie();
        zombie.Attack();

        Skeleton skeleton = new Skeleton();
        skeleton.Attack();
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
